class LoginManager {    // 登录管理器   
    constructor() {
        this.isSubmitting = false; // 是否正在提交
        this.form = document.getElementById('loginForm'); // 表单
        this.errorSpan = document.getElementById('error'); // 错误信息
        this.captchaImage = document.getElementById('captchaImage'); // 验证码图片
        this.refreshText = document.querySelector('.captcha-container p'); // 刷新文本
        
        // 清空表单
        this.form.reset();
        
        this.initializeEventListeners(); // 初始化事件监听器
        this.loadCaptcha(); // 加载验证码
        
        // 如果URL中有message参数，显示提示信息
        const urlParams = new URLSearchParams(window.location.search);
        const message = urlParams.get('message');
        if (message) {
            this.showError(decodeURIComponent(message));
        }
    }

    initializeEventListeners() {
        this.form.addEventListener('submit', this.handleSubmit.bind(this)); // 提交表单
        this.captchaImage.addEventListener('click', this.loadCaptcha.bind(this)); // 点击验证码图片
        this.refreshText.addEventListener('click', this.loadCaptcha.bind(this)); // 点击刷新文本
    }

    async loadCaptcha() {
        try {
            const response = await fetch('/getCaptcha'); // 获取验证码
            if (!response.ok) {
                throw new Error('网络响应不正确');
            }
            const data = await response.json();
            this.captchaImage.src = data.codeUrl; // 设置验证码图片
            document.getElementById('codeId').value = data.codeId; // 设置验证码ID
        } catch (error) {
            console.error('获取验证码失败，请刷新页面重试:', error);
            this.showError('获取验证码失败，请刷新页面重试');
        }
    }



    async handleSubmit(event) {
        event.preventDefault(); // 阻止表单提交
        if (this.isSubmitting) return; // 如果正在提交，则返回

        const formData = new FormData(this.form);
        const rawPassword = formData.get('password'); // 获取密码
        

        this.isSubmitting = true; // 设置正在提交
        this.setLoadingState(true); // 设置加载状态

        // 密码加密
        const hashedPassword = CryptoJS.SHA256(rawPassword).toString();
        formData.set('password', hashedPassword); // 设置密码

        try {
            const response = await fetch('/login', {
                method: 'post',
                body: formData,
                headers: {
                    'Accept': 'application/json' // 接受JSON
                }
            });
            await this.handleResponse(response); // 处理响应
        } catch (error) {
            console.error('请求出现错误：', error);
            this.showError('网络错误，请稍后重试');
        } finally {
            this.isSubmitting = false; // 设置正在提交
            this.setLoadingState(false); // 设置加载状态
        }
    }

    async handleResponse(response) {
        if (!response.ok) {
            const data = await response.json();
            this.showError(data.error);
            this.loadCaptcha();
            return;
        }
        // 清空表单
        this.form.reset();
        // 登录成功
        // 重定向到主页
        window.location.href = '/index';
    }

    showError(message) {
        const messageBox = document.getElementById('messageBox');
        const messageText = document.getElementById('messageText');
        
        messageText.textContent = message;
        messageBox.style.display = 'block';
        
        // 5秒后自动关闭
        setTimeout(() => {
            messageBox.style.animation = 'fadeOut 0.3s ease-out';
            setTimeout(() => {
                messageBox.style.display = 'none';
                messageBox.style.animation = '';
            }, 300);
        }, 5000);
    }

    setLoadingState(isLoading) {
        const submitButton = this.form.querySelector('button[type="submit"]');
        if (isLoading) {
            submitButton.classList.add('loading'); // 添加加载状态
            submitButton.disabled = true; // 禁用提交按钮
        } else {
            submitButton.classList.remove('loading'); // 移除加载状态
            submitButton.disabled = false; // 启用提交按钮
        }
    }
}

// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', () => {
    new LoginManager(); // 初始化登录管理器
}); 